5 CLS:PRINT "3-D Circle Fix Program:"
10 CLS:SET N
15 PRINT "x1:";xa;:INPUT xa:PRINT "y1:";ya;:INPUT ya:PRINT "z1:";za;:INPUT za:CLS
20 PRINT "x2:";xb;:INPUT xb:PRINT "y2:";yb;:INPUT yb:PRINT "z2:";zb;:INPUT zb:CLS
30 PRINT "x3:";xc;:INPUT xc:PRINT "y3:";yc;:INPUT yc:PRINT "z3:";zc;:INPUT zc:CLS
40 PRINT "Wait...";
50 dac=SQR(ABS(xa-xc)^2+ABS(ya-yc)^2+ABS(za-zc)^2
60 dab=SQR(ABS(xa-xb)^2+ABS(ya-yb)^2+ABS(za-zb)^2
70 dbc=SQR(ABS(xb-xc)^2+ABS(yb-yc)^2+ABS(zb-zc)^2
80 acos=((dac^2+dab^2-dbc^2)/(2*dac*dab)):bcos=((dab^2+dbc^2-dac^2)/(2*dab*dbc))
90 anga=90-ATN(acos/SQR(1-acos^2)):angb=90-ATN(bcos/SQR(1-bcos^2)):angc=180-(anga+angb)
100 IF anga<90 AND angb<90 AND dab>dac AND dab>dbc THEN GOTO 150
110 IF NOT(anga>90 OR angb>90) THEN GOTO 150
120 IF dab>dac AND dab>dbc THEN IF anga>90 THEN GOSUB 240 ELSE GOSUB 260
130 IF dac>dab AND dac>dbc THEN GOSUB 260 ELSE GOSUB 240
140 GOTO 50
150 ra=(dbc/2)/COS(90-anga):daz=(dac/2)/acos:p1=daz/dab
160 ez=xa-((xa-xb)*p1):nz=ya-((ya-yb)*p1):hz=za-((za-zb)*p1)
170 em=(xa+xc)/2:nm=(ya+yc)/2:hm=(za+zc)/2
180 dmz=SQR((ez-em)^2+(nz-nm)^2+(hz-hm)^2:dmo=SQR(ra^2-((dac/2)^2)):p2=dmo/dmz
190 ep=em-((em-ez)*p2):np=nm-((nm-nz)*p2):hp=hm-((hm-hz)*p2)
200 diam=SQR((ep-xa)^2+(np-ya)^2+(hp-za)^2)*2
210 CLS:SET F3:BEEP 0:PRINT "E: ";ep;TAB(16);"N: ";np;TAB(32);"H: ";hp;TAB(48);"D: ";diam
230 GOTO 10
240 txc=xc:xc=xa:xa=txc:tyc=yc:yc=ya:ya=tyc:tzc=zc:zc=za:za=tzc
250 RETURN
260 txc=xc:xc=xb:xb=txc:tyc=yc:yc=yb:yb=tyc:tzc=zc:zc=zb:zb=tzc
270 RETURN